//给定一个字符串，你需要反转字符串中每个单词的字符顺序，同时仍保留空格和单词的初始顺序。 
//
// 
//
// 示例： 
//
// 输入："Let's take LeetCode contest"
//输出："s'teL ekat edoCteeL tsetnoc"
// 
//
// 
//
// 提示： 
//
// 
// 在字符串中，每个单词由单个空格分隔，并且字符串中不会有任何额外的空格。 
// 
// Related Topics 双指针 字符串 👍 327 👎 0


//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public String reverseWords(String s) {
    StringBuffer str = new StringBuffer();//使用string buffer，因为调用append方法只会创建一个对象，效率更高
    int i = 0;//i指向s的当前元素
    int start = 0;//每个单词的开始位置，初始为0
    while (i < s.length()){
        //如果i指向为空格，直接追加到str，同时跳出本次循环
        if (i < s.length() && s.charAt(i) == ' '){
            str.append(' ');
            i++;
            continue;
        }
        //当i指向的元素不为空，一直自增，直到找到s中的空格为止
        while (i < s.length() && s.charAt(i) != ' '){
                i++;
        }
        //从空格位置的前一位开始，一直将元素追加到str，直到start的位置
        for (int j = i - 1; j >= start; j--){
            str.append(s.charAt(j));
        }
        //i当前指向的是空格,本次的单词追加完毕，下一个单词开始的位置为i+1
        start = i + 1;
    }
    return str.toString();
    }
}
//leetcode submit region end(Prohibit modification and deletion)
